/*!
 * \file jbossejb_core.h
 *
 * \brief jboss ejb数据包解析
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 *
 * \version 2.0
 * \author wuwk
 * \date 2016/02/25
 *
 */

#ifndef __JBOSSEJB_CORE_H_
#define __JBOSSEJB_CORE_H_

#include "conntrack.h"
#include "module.h"
#include "frreport_comm.h"
#include "frbyte_buffer.h"

#define JBOSSEJB_NO                       0
#define JBOSSEJB_YES                      1

#define JBOSSEJB_REQUEST                  0
#define JBOSSEJB_RESPONSE                 1

union int32_float_bits {
    int32_t int_bits;
    float float_bits;
};

union int64_double_bits {
    int64_t int_bits;
    double double_bits;
};

/*! 分片包数据 */
typedef struct __st_L7_fragment_jbossejb {
    uint32_t u32_total_len;                 // 实际数据总长度
    uint32_t u32_left_len;                  // 还需要接收的数据长度
    Frbyte_Packet *p_st_data;               // packet数据
} L7_fragment_jbossejb;


/* session信息 */
typedef struct __st_L7_session_jbossejb {
    char *p_username;
    char *p_server;                        // 服务名,版本号
    char *p_title;
} L7Session_jbossejb;

/*! jbossejb 私有信息储存 */
typedef struct __L7session_jbossejb_private
{
    unsigned long ul_seq;
    int i_responserequired;                   //是否需要响应
    L7_fragment_jbossejb *p_st_fragment;            //分片包数据
    L7Session_jbossejb *p_st_session;               //session
    L4_transaction st_l4_trans;
    Frlist_header *p_lst_req;                 //数据  req
    Frreport_body_data *p_st_body_data_req;
    Frreport_body_data *p_st_body_data_resp;
} L7session_jbossejb_private;

int jbossejb_detect(Conntrack *p_st_conn, Apm_packet *p_st_packet);

int jbossejb_analysis(Conntrack *p_st_conn
                  , Apm_packet *p_st_packet
                  , Frhash_header *p_st_hash_report);

int jbossejb_session_destroy(void *p_private_session);

#endif
